package com.icinfo.cloud.provider.punish.common.datareport.enums;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 描述：案件更改类型枚举类
 */
@AllArgsConstructor
@Getter
public enum CaseChangeOperationTypeEnum {

    /**
     * 案件操作类型：1、修改当事人信息，2、修改案发地址，3、修改承办人，4、修改案由，5、撤回，6、撤销立案，7、行政处罚撤销（撤回到调查取证阶段时需要重新上报），8、删除
     */
    OPERATION_TYPE_1("1", "UPDATE","修改当事人信息"),
    OPERATION_TYPE_2("2", "UPDATE","修改案发地址"),
    OPERATION_TYPE_3("3", "UPDATE","修改承办人"),
    OPERATION_TYPE_4("4", "UPDATE","修改案由"),
    OPERATION_TYPE_5("5", "REVOKE","撤回"),
    OPERATION_TYPE_6("6", "REVOKE","撤销立案"),
    OPERATION_TYPE_7("7", "REVOKE","行政处罚撤销"),
    OPERATION_TYPE_8("8", "DELETE","删除");

    /**
     * 案件操作类型
     */
    private String code;
    /**
     * 数据上报类型
     */
    private String reportTypeCode;
    /**
     * 描述
     */
    private String des;

    /**
     * 描述：根据code获取des
     *
     * @param code 编码
     * @return 描述内容
     */
    public static String getDesByCode(String code) {
        if (StrUtil.isEmpty(code)) {
            return null;
        }
        for (CaseChangeOperationTypeEnum e : CaseChangeOperationTypeEnum.values()) {
            if (code.equals(e.getCode())) {
                return e.getDes();
            }
        }
        return null;
    }

    /**
     * 描述：根据code获取reportTypeCode
     *
     * @param code 编码
     * @return 数据上报类型
     */
    public static String getReportTypeCodeByCode(String code) {
        if (StrUtil.isEmpty(code)) {
            return null;
        }
        for (CaseChangeOperationTypeEnum e : CaseChangeOperationTypeEnum.values()) {
            if (code.equals(e.getCode())) {
                return e.getReportTypeCode();
            }
        }
        return null;
    }

    /**
     * 描述：校验code是否是合法枚举
     *
     * @param code 枚举code
     * @return boolean 是否合法枚举（true-是/false-否）
     */
    public static boolean isLegalEnumCode(String code) {
        boolean flag = false;
        for (CaseChangeOperationTypeEnum e : CaseChangeOperationTypeEnum.values()) {
            if (e.getCode().equalsIgnoreCase(code)) {
                flag = true;
                break;
            }
        }
        return flag;
    }
}
